/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.fyx.linker.web;

import javax.ejb.Local;
import org.fyx.linker.web.category.CategoryTreeNode;
import org.primefaces.component.menuitem.MenuItem;

/**
 * Interface pro hlavni EJB modulu linker. Definuje metody pro praci s odkazy
 * a kategoriemi v systemu.
 * 
 * @author xljan
 * @since FYX 1.0
 */
@Local
public interface LinkerLocal {

    /**
     * Vrati odkaz dle nastavenych pravidel na konkretni stranku.
     * @param link relativni url stranky ve formatu modul/patch/stranka.xhtml
     * @return odkaz
     */
    String getLink(String link);
    
    /**
     * Prevede retezec tak, aby mohl byt pouzit v URL adrese.
     * 
     * @param string retezec
     * @return retezec vhodny pro URL
     */
    String convertForUrl(String string);
    
    /**
     * Podle aktualne naplnenych odkazu v 
     */
    void createMenuModel();

    /**
     * Prida link do menu. Pote se tento link zobrazuje v editoru
     * kategorii, kde se zacili.<br/>Atribut Value je preklad atributu id.<br/>
     * Priklad:<p>item = new MenuItem();<br/>
     *  item.setValue(mula.get("linker_category"));<br/>
     *  item.setIcon("ui-icon ui-icon-shuffle");<br/>
     *  item.setUrl(linker.getLink("linker/category/edit.xhtml"));<br/>
     *  item.setId("linker_category");<br/>
     *  linker.addMenuItem(item, LinkerRoles.CATEGORY_MANAGER);</p>
     * @param menuItem odkaz.
     * @param role uzivatelska role nutna pro zobrazeni odkazu
     */
    void addMenuItem(MenuItem menuItem, String role);
    
    /**
     * Prida link do menu. Pote se tento link zobrazuje v editoru
     * kategorii, kde se zacili.<br/>Atribut Value je preklad atributu id.<br/>
     * @param menuItem odkaz
     * @param 
     */
    /**
     * Prida link do menu. Pote se tento link zobrazuje v editoru
     * kategorii, kde se zacili.
     * @param value nazev odkazu je jeho ID
     * @param url url adresa odkazu dle vnitrnich pravidel viz. getLink
     * @param id ID odkazu stejne jako value
     * @param icon ikona
     * @param role uzivatelska role nutna pro zobrazeni odkazu 
     */
    void addMenuItem(String value, String url, String id, String icon, String role);

    /**
     * Vytvori novy menu model. Pokud je menu model jiz vytvoren, prepise ho.
     * Nenutí znovuvytvoření položek v menu.
     */
    void recreateMenuModel();
    
    /**
     * Ulozi do databaze nove menu.
     * 
     * @param root koren menu
     */
    void updateMenu(CategoryTreeNode root);
    
    /**
     * Odebere zaznam o zacileni odkazu z databaze.
     * 
     * @param idMenuItem id odkazu
     */
    void removeMenuItem(String idMenuItem);
    
}
